﻿using System.Collections.Generic;
using System.Linq;
using Acaweb.Servicios.Contracts;
using Acaweb.Common;
using System.ServiceModel.Activation;
using Acaweb.Model.Entities;
using Acaweb.Model.Entities.DatosCompuestos;
using Acaweb.Servicios.Utility;
using Components = Acaweb.Componentes.Contracts;

namespace Acaweb.Servicios.Services
{
    [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Required)]
    public class CursosMatriculadosService : Contracts.ICursosMatriculadosService
    {
        Components.ICursosMatriculadosService _CursoMatriculadoComponent = AppCtx.Resolve<Components.ICursosMatriculadosService>();

        public CursosMatriculados GetById(CursosMatriculadosPk Curso)
        {
            return _CursoMatriculadoComponent.GetById(Curso);
        }

        public List<CursosMatriculados> GetByCurso(CursoPk Curso)
        {
            return _CursoMatriculadoComponent.GetByCurso(Curso).ToList();
        }

        public List<CursosMatriculados> GetByEstudiante(int CodigoEstudiante)
        {
            return _CursoMatriculadoComponent.GetByEstudiante(CodigoEstudiante).ToList();
        }

        public List<CursosMatriculados> GetByEstudianteAndPeriodoAcademico(int CodigoEstudiante, PeriodoAcademico PeriodoAcademico)
        {
            return _CursoMatriculadoComponent.GetByEstudiante(AuthenticationService.GetCurrent().ToInt(), PeriodoAcademico).ToList();
        }

        public ServiceResponse Create(CursosMatriculados CursoMatriculado)
        {
            if (CursoMatriculado.CursoMatriculadoPk.CodigoEstudiante == AuthenticationService.GetCurrent().ToInt())
            {
                try
                {
                    _CursoMatriculadoComponent.CreateCursosMatriculados(CursoMatriculado);
                    return new ServiceResponse { Success = true };
                }
                catch (System.Exception ex)
                {
                    return new ServiceResponse { Success = false, Message = ex.Message };
                }
            }
            return new ServiceResponse { Success = false };
        }

        public void SolicitarRetiro(CursosMatriculados CursoMatriculado)
        {
            throw new System.NotImplementedException();
        }

        public List<CursosMatriculados> GetAprovados(int CodigoEstudiante)
        {
            return _CursoMatriculadoComponent.GetCursosMatriculadosAprovados(AuthenticationService.GetCurrent().ToInt()).ToList();
        }

        public bool IsValid(List<CursosMatriculados> Lista)
        {
            return _CursoMatriculadoComponent.IsNotTimeConfflict(Lista);
        }

        public List<CursosMatriculados> _GetByEstudiante()
        {
            return _CursoMatriculadoComponent.GetByEstudiante(AuthenticationService.GetCurrent().ToInt()).ToList();
        }

        public List<CursosMatriculados> GetByEstudianteAndPeriodoAcademico(PeriodoAcademico PeriodoAcademico)
        {
            return _CursoMatriculadoComponent.GetByEstudiante(AuthenticationService.GetCurrent().ToInt(), PeriodoAcademico).ToList();
        }

        public List<CursosMatriculados> _GetAprovados()
        {
            return _CursoMatriculadoComponent.GetCursosMatriculadosAprovados(AuthenticationService.GetCurrent().ToInt()).ToList();
        }
    }
}